package com.jitu.bigscreen.component;

import com.sun.jna.Library;
import com.sun.jna.Native;

import java.io.File;
import java.util.Vector;


public interface LedControlInf extends Library/*StdCallLibrary*/ {
	//部署使用的操作系统标识，值可以填windows或linux,默认值为windows

//	Environment env = SpringApplicationUtils.getBean(Environment.class);
//	String osTypeFlag = env.getProperty("jitu.environment-type", String.class, "windows");//"windows";
	String osTypeFlag = "windows";//"windows";
	Class c = LedControlInf.class;
	String path = System.getProperty("user.dir") + File.separator + "src" + File.separator + "main" + File.separator + "java" + File.separator + "cn" + File.separator +  "x64" + File.separator;


//	LedControlInf INSTANCE = (LedControlInf) Native.loadLibrary("E:\\ListenLedX3_WIN32\\ListenLedX3\\Debug\\DllEx_0116", c);
//	String strDllPath = "G:\\workspace\\project\\svn\\ListenCloud\\dll-demo\\bin\\ListenLedX3";//c.getClass().getResource("/").getPath()+ "\\ListenLedX3";

	String strDllPath = osTypeFlag.equals("windows") ? path + "ListenLedX3" : path + "libListenLedX3.so";

    LedControlInf INSTANCE = (LedControlInf) Native.loadLibrary(osTypeFlag.equals("windows") ? strDllPath.replace('/', '\\') : strDllPath , c);



//	int RtfConvertBmp2(String path,int rcWidth,int rcHeight,String[] strarray,int ILINE, int ISTOP,int w,int h,int LineSpace);
//	int RtfConvertBmp2(String path,int rcWidth,int rcHeight,ArrayList<String> strarray,int ILINE, int ISTOP,int w,int h,int LineSpace);

	int RtfConvertBmp2_1(String path,int rcWidth,int rcHeight,int ILINE, int ISTOP,int w,int h,int LineSpace);

	int RtfConvertBmp3(String path,int uBackColor,int rcWidth,int rcHeight,Vector<String> vs ,int ILINE, int ISTOP,int w,int h,int LineSpace);

	int RtfConvertBmp3_1(String path,int uBackColor,int rcWidth,int rcHeight,int ILINE, int ISTOP,int w,int h,int LineSpace);

	int AdjustTime(String strIP);

	//HorAlign; //1左 2右 3居中
	int String2rtfFile_1(int FontColor,String pFontName, int fontSize,int IsBOLD,int IsITALIC,int IsUNDERLINE,int IsSTRIKEOUT, int HorAlign, String pContent,String pPath);

	/// <summary>
    /// 初始化DLL
    /// </summary>
    void LV_InitDllEx();

    /// <summary>
    /// 添加一个节目页面
    /// </summary>
    /// <param name="pIp"></param>
    /// <param name="pProgramInfoJson"></param>
    /// <returns></returns>

    int LV_AddProgram(byte[] pIp, byte[] pProgramInfoJson);

    /// <summary>
    /// 给节目添加一个区域信息
    /// </summary>
    /// <param name="pIp"></param>
    /// <param name="nProgramId"></param>
    /// <param name="pAreaInfoJson"></param>
    /// <returns></returns>
    int LV_AddArea(byte[] pIp, int nProgramId, byte[] pAreaInfoJson);

    /// <summary>
    /// 发送对应IP的节目
    /// </summary>
    /// <param name="pIp"></param>
    /// <returns></returns>
    int LV_SendProgramToDevice(byte[] pIp);

    /// <summary>
    /// 开关屏
    /// </summary>
    /// <param name="pIp">设备的ip地址  </param>
    /// <param name="isOn">1:开 0:关  </param>
    /// <returns>0:成功 -1:失败,可调用LV_GetLastErrInfo()接口获取错误信息 </returns>
    int LV_SwitchLed(byte[] pIp, int isOn);

    int LV_ClearProgram(byte[] pIp);

    /**
     *
     *清除对应的屏幕保存在本地的节目数据
	 *输入参数: pScreenName:屏幕名称, 节目所在的屏幕的名称
	 * pProgramId:需要删除的节目 id.可为空,为空时,删除屏幕的所有节目包括屏幕
	 *
	 *返回值: 0:成功
	 -1:失败,可调用 LV_GetLastErrInfo()接口获取错误信息
     * @param pScreenName
     * @param pProgramId
     * @return
     */
    int LV_ClearLocalProgram (byte[] pScreenName,byte[] pProgramId);


   /**
    * 清理终端缓存
	 * @param pIp
	 * @return
   */
   int LV_ClearDeviceSpace(byte[] pIp);


   /**
	将设备的重启,重启后与设备的连接将断开,电脑端需重新连接设备
    *输入参数:pIp:设备的 ip 地址
    *
    *返回值:0:成功
	-1:失败,可调用 LV_GetLastErrInfo()接口获取错误信息
  */
   int LV_RestartDevice(byte[] pIp);

   /**
    * 功能:获取最近一次失败操作的错误信息
	* @param pIp
	* @param nBufLen
	* @return
  **/
   int LV_GetLastErrInfo(byte[] pIp,int nBufLen);

   /**
    * 同步时间
	* @param pIp
	* @return
   **/
   int LV_SynchronizationTime(byte[] pIp);


   /**
    * *停止设备正在播放的节目,使设备开始播放默认节目
	*输入参数:pIp:发送的设备的 ip 地址 *
	*
	*返回值:0:成功
	-1:失败,可调用 LV_GetLastErrInfo()接口获取错误信息
	 * @param pIp
	 * @return
   */
   int LV_StopPlay(byte[] pIp);


   /**
	*使设备开始按计划播放节目
	*输入参数:pIp:发送的设备的 ip 地址 *
	*
	*返回值:0:成功
	-1:失败,可调用 LV_GetLastErrInfo()接口获取错误信息
	 * @return
   */
   int LV_RunPlay(byte[] pIp);

   //   int LV_AddPageToProgram(byte[] pIp, byte[] pProgramId, byte[] pPageJson);


   /**
    *
    * *设置设备定时亮度信息
	*输入参数:pIp:设备的 ip 地址
	* pTimingInfo:定时亮度信息组成的 json 字符串; *
	*返回值:0:成功
	-1:失败,可调用 LV_GetLastErrInfo()接口获取错误信息
	pTimingInfo 的格式(Json)
	一级Key 二级Key 类型 说明
	period Array 定时亮度参数(3 组)
	startTime  string  开始时间 如:18:00 为空表示未启用改组定时
	endTime  string  结束时间 如:19:01 为空表示未启用改组定时
	value  string  亮度值 0~100 为空表示未启用改组定时
	isSwitchFlag int 是否启用该组定时数据
	value string 亮度默认值 0~100 即未使用定时亮度时的亮度值,也是实时的亮度值
	* @param pIp
	* @param pTimingInfo 参数格式样例如下：{"period":[{"endTime":"09:00","isSwitchFlag":"1","startTime":"00:00","value":"88"},{"endTime":"12:00","isSwitchFlag":"1","startTime":"10:00","value":"31"}],"value":"44"}
	* @return
   */
   int LV_SetTimingBrightnessInfo (byte[] pIp,byte[] pTimingInfo);

   /**
    * 1.25
	 * @param pScreenName
	 * @param pProgramId
	 * @param pPageJson
	 * @return
   */
   int LV_AddPageToProgram(byte[] pScreenName, byte[] pProgramId, byte[] pPageJson);

//   int LV_AddArea(byte[] pIp, byte[] pProgramId, int nPageId, byte[] pAreaInfoJson);


   /**
    * 1.25
 * @param pScreenName
 * @param pProgramId
 * @param nPageId
 * @param pAreaInfoJson
 * @return
 */
   int LV_AddArea(byte[] pScreenName, byte[] pProgramId, int nPageId, byte[] pAreaInfoJson);

   void LV_InitDllEx(int nlog);

//   int LV_SendProgramToDevice(byte[] pIp, byte[] pProgramId, byte[] pProgramName);

   /**
    * 1.25
    *
	 * @param pScreenName
	 * @param pIp
	 * @param pProgramId
	 * @param pProgramName
	 * @param pPassword
	 * @return
   */
    int LV_SendProgramToDevice(byte[] pScreenName,byte[] pIp, byte[] pProgramId, byte[] pProgramName, byte[] pPassword);

   int LV_CancelSendProgramToDevice();

   int LV_SendProgramPlan(byte[] pIp, byte[] pPlanData, byte[] pDefResVideoFile);

   int LV_SendProgramPlan2(byte[] pIp, byte[] pPlanData, byte[] pDefResVideoFile);


   /**
    * 1.25
    *
    * 节目的发送流程完成,用来清除节目生成的临时文件和临时数据
    * 动态库版本为1.25以后才支持
    *
	* @return
   */
    int LV_ProgramSendProcessEnd();

    void LV_InitDllTest();

    int LV_GetDeviceVersion(byte[] pIp, byte[] pVersionInfo, int nBufLen);

    /**
     * *刷新固定区域
	 *输入参数:pIp:发送的设备的 ip 地址
	 * pInfoJson:参数(json 格式),具体格式可参见文档;
	 *返回值:0:成功
	-1:失败,可调用 LV_GetLastErrInfo()接口获取错误信息
     * @param pIp
     * @param pInfoJson
     * @return
     */
    int LV_RefreshFixedArea(byte[] pIp,  byte[] pInfoJson);

    /**
     * *刷新图片(type=204)区域的数据
     *输入参数: pIp:设备 ip
     * pPicJson: 刷新数据数据组成的 json
     *
     *返回值:0:成功
      -1:失败,可调用 LV_GetLastErrInfo()接口获取错误信息
     *
     * @param pIp
     * @param pInfoJson
     * @return
     */
    int LV_RefreshPictureArea(byte[] pIp,  byte[] pInfoJson);
}
